"""
    cv2.adaptiveThreshold()
    cv2.threshold()
    相同点：阈值处理，做图像分割，简化图像信息，便于后续的计算操作。
    不同点：
        cv2.threshold() 针对于全局，只有一个阈值（指定或者OTSU自动计算）
        cv2.adaptiveThreshold() 关注局部领域块，为每一个像素点都计算一个阈值，能更好处理光照不均匀的图像
"""
import cv2
import matplotlib.pyplot as plt

img = cv2.imread("../images/flower.png", cv2.IMREAD_GRAYSCALE)

# 方式一：邻域块内的均值作为该像素的阈值
thresh_mean = cv2.adaptiveThreshold(img,
                                    maxValue=255,  # 阈值的处理的最大值
                                    adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C,  # 采用邻域块平均值计算
                                    thresholdType=cv2.THRESH_BINARY,  # 阈值处理类型
                                    blockSize=3,  # 邻域块大小，必须是奇数
                                    C=2)  # 微调阈值的常数，不想微调的话，可以设为0
# 方式二：邻域块内的高斯加权作为该像素的阈值
thresh_gaussian = cv2.adaptiveThreshold(img,
                                        maxValue=255,
                                        adaptiveMethod=cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                        thresholdType=cv2.THRESH_BINARY,
                                        blockSize=3,
                                        C=2)

plt.subplot(131), plt.imshow(img, cmap='gray'), plt.axis('off')
plt.subplot(132), plt.imshow(thresh_mean, cmap='gray'), plt.axis('off')
plt.subplot(133), plt.imshow(thresh_gaussian, cmap='gray'), plt.axis('off')
plt.show()